package com.mf.utils;

import com.mf.entity.RecommendCode;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @Author: lmf
 * @Create: 2024/5/2 17:59
 * Description:
 */
public class MACalculator {
    /**
     * 计算移动平均值并返回包含结果的列表
     *
     * @param recommendCodes 交易代码列表
     * @param period 移动平均的周期（例如5或10）
     * @return 包含移动平均值的列表
     */
    public static List<Double> calculateMovingAverages(List<RecommendCode> recommendCodes, int period) {
        // 初始化结果列表
        List<Double> movingAverages = new ArrayList<>();

        // 初始化求和变量和计数器
        double sum = 0;
        int count = 0;

        for(int i = 0; i < recommendCodes.size(); i++){
            if(i<period-1){
                movingAverages.add(0.0);
            }

            sum += recommendCodes.get(i).getC();
            count++;
                        // 如果已经收集了足够的数据点来计算移动平均值
            if (count == period) {
                // 计算移动平均值并添加到结果列表中
                movingAverages.add(sum / period);

                // 重置求和变量和计数器以计算下一个移动平均值
                sum -= recommendCodes.get(i - period+1).getC();
                count--;
            }
        }

        // 返回包含所有移动平均值的列表
        return movingAverages;
    }

}
